<?php

class AdmFrmEmpresa extends TPage {
//<editor-fold defaultstate="collapsed" desc="Verifica Usuario Logueado">
  /**
   * determina si el usuario esta logueado en el sistema
   * @author VSR, 11/11/2011
   */
  private function usuarioLogueado(){
    $estaLogueado = false;
    try {
      $session = new THttpSession;
      $session->open();
      $oUsuario = $session[Usuario::NOMBRE_ENTIDAD];
      if(isset($oUsuario)){
        $estaLogueado = true;
      }
    } catch (Exception $e) {
      $estaLogueado = false;
    }
    return $estaLogueado;
  }

  /**
   * redirecciona al login
   * @author VSR, 11/11/2011
   */
  private function redireccionarLogin(){
    $this->Response->redirect($this->Service->constructUrl("Admin"));
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Constantes">
  const SESION_DATOS = "arr";
  //funciones pagina
  const FUNCION_VER = "Ver";
  const FUNCION_CREAR = "Crear";
  const FUNCION_EDITAR = "Editar";
  const FUNCION_ELIMINAR = "Eliminar";
  //indices arreglo
  const ARRAY_DETALLE = 0;
  const ARRAY_LISTADO_USUARIOS_NO_PERTENECEN = 1;
  const ARRAY_LISTADO_USUARIOS_PERTENECEN = 2;
  const ARRAY_LISTADO_PLANTILLAS_NO_PERTENECEN = 3;
  const ARRAY_LISTADO_PLANTILLAS_PERTENECEN = 4;

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * obtiene los registros desde la base de datos
   * @author VSR, 11/11/2011
   */
  private function obtenerDatos($idEmpresa){
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arr = WfEmpresa::obtenerDetalle($idEmpresa, WfEmpresa::NOMBRE_ENTIDAD_LOGO);
      Utilidades::grabarSessionPorNombre(self::SESION_DATOS.$nombrePagina, $arr);
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * actualiza los controles de la pagina segun los datos obtenidos
   * @author VSR, 11/11/2011
   */
  private function actualizaInterfaz(){
    $totalRegistros = 0;
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS.$nombrePagina);

      //inicializa controles en vacio
      $idEmpresa = $this->txtIdEmpresa->Value;
      $rut = "";
      $razonSocial = "";
      $nombre = "";
      $giro = "";
      $url = "";
      $direccion = "";
      $fechaInicio = "";
      $fechaTermino = "";
      $activo = 0;
      $idArchivo = "0";
      $nombreArchivo = "";

      if(!is_null($arr)) {
        $arrDetalle = $arr[self::ARRAY_DETALLE];
        $totalRegistros = count($arrDetalle);
        if($totalRegistros > 0) {
          $row = $arrDetalle[0];
          $rut = $row["Rut"];
          $razonSocial = $row["RazonSocial"];
          $nombre = $row["Nombre"];
          $giro = $row["Giro"];
          $url = $row["Url"];
          $direccion = $row["Direccion"];
          $fechaInicio = $row["FechaInicio"];
          $fechaTermino = $row["FechaTermino"];
          $activo = $row["Activo"];
          $idArchivo = $row["IdArchivo"];
          $nombreArchivo = $row["NombreArchivo"];
        }
      }

    } catch (Exception $e) {
      $rut = "";
      $razonSocial = "";
      $nombre = "";
      $giro = "";
      $url = "";
      $direccion = "";
      $fechaInicio = "";
      $fechaTermino = "";
      $activo = 0;
      $idArchivo = "0";
      $nombreArchivo = "";
    }

    //asigna valores
    $this->txtRut->Text = $rut;
    $this->txtRazonSocial->Text = $razonSocial;
    $this->txtNombre->Text = $nombre;
    $this->txtGiro->Text = $giro;
    $this->txtUrl->Text = $url;
    $this->txtDireccion->Text = $direccion;
    $this->txtFechaInicio->Text = $fechaInicio;
    $this->txtFechaTermino->Text = $fechaTermino;
    $this->txtIdArchivo->Value = $idArchivo;
    $this->chkActivo->Checked = ($idEmpresa == "0") ? true : ( ($activo == 1) ? true : false );
    $this->lblTituloFormulario->Text = ( ($idEmpresa == "0") ? "Crear" : "Modificar" )." Empresa";
    $this->pnlLogo->Visible = ($idArchivo == "0") ? false : true;

    //construye ruta del archivo en el repositorio
    if($idArchivo != "0") {
      $entidad = WfEmpresa::NOMBRE_ENTIDAD_LOGO;
      $rutaImagen = Archivo::RUTA_REPOSITORIO."/$entidad/reg$idEmpresa/$idArchivo/$nombreArchivo";
      $this->lblImagen->Text = "<img src=\"$rutaImagen\" alt=\"\" />";
    }

    //actualiza el multiselect
    if(!is_null($arr)) {
      $this->msUsuarios->dataSourcePadre($arr[self::ARRAY_LISTADO_USUARIOS_NO_PERTENECEN]);
      $this->msUsuarios->dataTextFieldPadre("Texto");
      $this->msUsuarios->dataValueFieldPadre("Valor");
      $this->msUsuarios->dataBindPadre();
      $this->msUsuarios->dataSourceHija($arr[self::ARRAY_LISTADO_USUARIOS_PERTENECEN]);
      $this->msUsuarios->dataTextFieldHija("Texto");
      $this->msUsuarios->dataValueFieldHija("Valor");
      $this->msUsuarios->dataBindHija();

      $this->msPlantillas->dataSourcePadre($arr[self::ARRAY_LISTADO_PLANTILLAS_NO_PERTENECEN]);
      $this->msPlantillas->dataTextFieldPadre("Texto");
      $this->msPlantillas->dataValueFieldPadre("Valor");
      $this->msPlantillas->dataBindPadre();
      $this->msPlantillas->dataSourceHija($arr[self::ARRAY_LISTADO_PLANTILLAS_PERTENECEN]);
      $this->msPlantillas->dataTextFieldHija("Texto");
      $this->msPlantillas->dataValueFieldHija("Valor");
      $this->msPlantillas->dataBindHija();
    }

    //verifica si tiene que mostrar el boton para crear un workflow
    if(is_null($arr)){
      $this->pnlAvisoWorkflow->Visible = true;
      $this->btnNuevoWorkflow->Visible = false;
      $this->hTablaWorkflow->Visible = false;
    } else {
      $totalPlantillas = count($arr[self::ARRAY_LISTADO_PLANTILLAS_PERTENECEN]);
      if($idEmpresa == "0") {
        $this->pnlAvisoWorkflow->Visible = true;
        $this->btnNuevoWorkflow->Visible = false;
        $this->hTablaWorkflow->Visible = false;
      } else {
        if($totalPlantillas == 0) {
          $this->pnlAvisoWorkflow->Visible = true;
          $this->btnNuevoWorkflow->Visible = false;
          $this->hTablaWorkflow->Visible = false;
        } else {
          $this->pnlAvisoWorkflow->Visible = false;
          $this->btnNuevoWorkflow->Visible = true;
          $this->hTablaWorkflow->Visible = true;
        }
      }

    }



  }

  /**
   * inicializa algunos controles cuando se carga por primera vez la pagina
   * @param <type> $isPostBack
   * @author VSR, 11/11/2011
   */
  private function inicializaControles($isPostBack){
    try {
      $nombrePagina = $this->obtenerNombrePagina();
      $idEmpresa = $this->txtIdEmpresa->Value;
      $estado = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("Estado".$nombrePagina), "");
      $cargarDesdePopUp = "0";

      if($estado == "INGRESADO" || $estado == "MODIFICADO" || $estado == "ELIMINADO") {
        $cargarDesdePopUp = "1";
      }

      //agrega atributo a control
      $this->btnCrear->Attributes->Add("onclick", "return(validarFormularioEmpresa())");
      $this->btnAplicar->Attributes->Add("onclick", "return(validarFormularioEmpresa())");
      $this->btnAceptar->Attributes->Add("onclick", "return(validarFormularioEmpresa())");
      $this->btnEliminar->Attributes->Add("onclick", "return(validarEliminarEmpresa())");
      $this->btnCerrar->Attributes->Add("onclick", "cerrarPopUpEmpresa('','".$cargarDesdePopUp."','')");
      $this->txtRut->Attributes->Add("onblur", "comprobarDuplicidadDatos('".$idEmpresa."','".$this->txtRut->ClientID."','".$this->txtExisteRut->ClientID."','".$this->divExisteRut->ClientID."','Empresa.Rut');");
      $this->txtRazonSocial->Attributes->Add("onblur", "comprobarDuplicidadDatos('".$idEmpresa."','".$this->txtRazonSocial->ClientID."','".$this->txtExisteRazonSocial->ClientID."','".$this->divExisteRazonSocial->ClientID."','Empresa.RazonSocial');");
      $this->txtNombre->Attributes->Add("onblur", "comprobarDuplicidadDatos('".$idEmpresa."','".$this->txtNombre->ClientID."','".$this->txtExisteNombre->ClientID."','".$this->divExisteNombre->ClientID."','Empresa.Nombre');");
      $this->txtUrl->Attributes->Add("onblur", "comprobarDuplicidadDatos('".$idEmpresa."','".$this->txtUrl->ClientID."','".$this->txtExisteUrl->ClientID."','".$this->divExisteUrl->ClientID."','Empresa.Url');");
      $this->btnNuevoContacto->Attributes->Add("onclick", "abrirFormularioContactoEmpresa('".$idEmpresa."','-1')");
      $this->btnNuevoWorkflow->Attributes->Add("onclick", "abrirFormularioWorkflowMinimo('".$idEmpresa."',0,'-1')");

      //inicializa los controles del Correlativo y Locales
      $this->inicializaControlesEventoWindowOnLoad($isPostBack);

      //verifica los permisos sobre los controles
      $this->verificarPermisos();

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa los controles al cargar la pagina
   * @param <type> $isPostBack
   * @author VSR, 11/11/2011
   */
  private function inicializaControlesEventoWindowOnLoad($isPostBack) {
    $nombrePagina = $this->obtenerNombrePagina();
    $estado = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("Estado".$nombrePagina), "");
    $sb = new StringBuilder();
    $idEmpresa = $this->txtIdEmpresa->Value;

    if($estado == "INGRESADO" || $estado == "MODIFICADO" || $estado == "") {
      $sb->appendLine("setTimeout(\"ocultarElemento('".$this->pnlMensajeUsuario->ClientID."')\", 5000);");
    }
    $sb->appendLine("dibujarTablaContactoEmpresa('".$idEmpresa."');");
    $sb->appendLine("dibujarTablaWorkflowEmpresa('".$idEmpresa."');");

    $this->Page->ClientScript->registerEndScript("windowOnLoad", $sb->toString());
  }

  /**
   * verifica los permisos sobre los controles
   * @author VSR, 11/11/2011
   */
  private function verificarPermisos(){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    $idEmpresa = $this->txtIdEmpresa->Value;
    //verifica los permisos para los controles
    $this->pnlContenido->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER);
    $this->hBotonCrear->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER) && $idEmpresa == "0" && Utilidades::tienePermiso($paginaActual, self::FUNCION_CREAR);
    $this->hBotonAplicar->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER) && $idEmpresa != "0" && Utilidades::tienePermiso($paginaActual, self::FUNCION_EDITAR);
    $this->hBotonAceptar->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER) && $idEmpresa != "0" && Utilidades::tienePermiso($paginaActual, self::FUNCION_EDITAR);
    $this->hBotonEliminar->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER) && $idEmpresa != "0" && Utilidades::tienePermiso($paginaActual, self::FUNCION_ELIMINAR);

    if(!$this->pnlContenido->Visible) {
      $this->pnlMensajeAcceso->Visible = true;
      Utilidades::setPanelMensajeUsuario($this->pnlMensajeAcceso, "No tiene permiso para ver esta p&aacute;gina", "50%", Utilidades::ESTILO_MENSAJE_ERROR);
    }
  }

  /**
   * muestra mensaje al usuario
   * @author VSR, 11/11/2011
   */
  private function mostrarMensajeUsuario(){
    try {
      $mensaje = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("msg"),"");
      $baseUrl = $this->Page->Theme->BaseUrl;

      //asigna mensaje al panel
      $this->pnlMensajeUsuario->Visible = true;

      //dependiendo de la marca especial que tenga el sistema es como se muestra el mensaje al usuario
      if(strpos($mensaje, "{#INGRESADO}") === 0) {
        $mensaje = str_replace("{#INGRESADO}", "", $mensaje);
        Utilidades::setPanelMensajeUsuarioConBotonCerrar($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_EXITO, $baseUrl);
      } elseif (strpos($mensaje, "{#MODIFICADO}") === 0) {
        $mensaje = str_replace("{#MODIFICADO}", "", $mensaje);
        Utilidades::setPanelMensajeUsuarioConBotonCerrar($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_EXITO, $baseUrl);
      } elseif (strpos($mensaje, "{#ELIMINADO}") === 0) {
        $mensaje = str_replace("{#ELIMINADO}", "", $mensaje);
        Utilidades::setPanelMensajeUsuarioConBotonCerrar($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_EXITO, $baseUrl);
      } elseif (strpos($mensaje, "{#DUPLICADO}") === 0) {
        $mensaje = str_replace("{#DUPLICADO}", "", $mensaje);
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_ERROR);
      } elseif (strpos($mensaje, "{#ERROR}") === 0) {
        $mensaje = str_replace("{#ERROR}", "", $mensaje);
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_ERROR);
      } else {
        $this->pnlMensajeUsuario->Visible = false;
      }
      Utilidades::grabarSessionPorNombre("msg", "");
    } catch (Exception $e) {
      $this->pnlMensajeUsuario->Visible = false;
    }

  }

  /**
   * obtiene nombre de la pagina actual
   * @return <type>
   * @author VSR, 11/11/2011
   */
  private function obtenerNombrePagina(){
    $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
    return $nombrePagina;
  }

  /**
   * graba los datos de la empresa
   * @author VSR, 11/11/2011
   */
  private function grabarEmpresa($accion) {
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $idEmpresa = $this->txtIdEmpresa->Value;
      $status = "";
      $textoMensaje = "";
      $grabadoConExito = true;
      $queryStringPagina = "";

      //grabar valores
      $textoMensaje .= $this->grabarDatosEmpresa($status, $idEmpresa);

      if ($textoMensaje != "") {
        $grabadoConExito = false;
      } else {
        $grabadoConExito = true;
      }

      //muestra mensaje dependiendo si se grabo o no
      if ($grabadoConExito) {
        switch ($status) {
          case "ingresado":
            $textoMensaje = "{#INGRESADO}La empresa fue ingresado satisfactoriamente.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "INGRESADO");
            break;
          case "modificado":
            $textoMensaje = "{#MODIFICADO}La empresa fue actualizado satisfactoriamente.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "MODIFICADO");
            break;
          case "duplicado":
            $textoMensaje = "{#DUPLICADO}La empresa ya existe. Ingrese otro por favor.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "DUPLICADO");
            break;
          case "error":
            $textoMensaje = "{#ERROR}Se produjo un error interno y no se pudo ingresar la empresa. Intente nuevamente por favor.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
            break;
          default:
            break;
        }
      } else {
        $textoMensaje = "{#ERROR}".$textoMensaje;
        Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
      }

      if (($status == "ingresado" || $status == "modificado") && $accion == Sistema::ACEPTAR ) {
        Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "");
        $this->Page->ClientScript->registerEndScript("cerrarPopUp", "cerrarPopUpEmpresa('".$idEmpresa."','1','".urlEncode($this->txtRut->Text)."');");
      } else {
        Utilidades::grabarSessionPorNombre("msg", $textoMensaje);
        //construye query string con los valores correspondientes
        $queryStringPagina = "&id=".$idEmpresa;
        $this->Response->redirect("index.php?page=".$nombrePagina.$queryStringPagina);
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * graba o actualiza la empresa en base de datos
   * @param <type> $status
   * @param <type> $idEmpresa
   * @return string
   * @author VSR, 11/11/2011
   */
  private function grabarDatosEmpresa(&$status, &$idEmpresa) {
    $msgError = "";
    try {
      $rut = Utilidades::isNull($this->txtRut->Text, "");
      $razonSocial = Utilidades::isNull($this->txtRazonSocial->Text, "");
      $nombre = Utilidades::isNull($this->txtNombre->Text, "");
      $giro = Utilidades::isNull($this->txtGiro->Text, "");
      $url = Utilidades::isNull($this->txtUrl->Text, "");
      $direccion = Utilidades::isNull($this->txtDireccion->Text, "");
      $fechaInicio = Utilidades::isNull($this->txtFechaInicio->Text, "");
      $fechaTermino = Utilidades::isNull($this->txtFechaTermino->Text, "");
      $idArchivo = Utilidades::isNull($this->txtIdArchivo->Value, "0");
      $activo = ($this->chkActivo->Checked) ? "1" : "0";
      $listadoIdUsuarios = $this->msUsuarios->valueListadoId();
      $listadoIdPlantillas = $this->msPlantillas->valueListadoId();
      
      //formatea valores
      Utilidades::separarRut($rut,$dv);

      $arr = WfEmpresa::grabarDatos($idEmpresa, $rut, $dv, $razonSocial, $nombre, $giro, $url, $direccion, $fechaInicio, $fechaTermino,
                                    $activo, $listadoIdUsuarios, $listadoIdPlantillas);

      if(is_null($arr)){
        throw new Exception("Error al ejecutar WfEmpresa->grabarDatosEmpresa()");
      } else {
        $idEmpresa = $arr[0]["IdEmpresa"];
        $status = $arr[0]["Status"];
        if ($status == "duplicado") { $idEmpresa = "0"; }

        if($idEmpresa != "0" ) {
          if($this->fuImagen->HasFile){
            Archivo::eliminarArchivoEnBDPorId($idArchivo);
            Utilidades::grabarArchivoFileUpload($this->fuImagen, $idEmpresa, WfEmpresa::NOMBRE_ENTIDAD_LOGO);
          } else {
            if($this->chkEliminarLogo->Checked){
              Archivo::eliminarArchivoEnBDPorId($idArchivo);
            }
          }
          //graba los contactos
          $this->grabarContactos($idEmpresa);
          //graba los workflow
          $this->grabarWorkflow($idEmpresa);
        }

      }
    } catch (Exception $e) {
      $msgError = "Se produjo un error interno, no se pudo grabar la empresa.<br/>";
      $idEmpresa = ($idEmpresa > 0) ? $idEmpresa : "0";
      $status = "error";
    }
    return $msgError;
  }

  /**
   * elimina los datos de la empresa
   * @param <type> $status
   * @param <type> $idEmpresa
   * @return string
   * @author VSR, 11/11/2011
   */
  private function eliminarEmpresa(&$status, $idEmpresa) {
    $msgError = "";

    try {
      $status = WfEmpresa::eliminarDatos($idEmpresa);
    } catch (Exception $e) {
      $msgError = "Se produjo un error interno, no se pudo eliminar la empresa.<br/>".$e->getMessage();
    }
    //retorna valor
    return $msgError;
  }

  /**
   * graba los datos de los contactos
   * @param <type> $idEmpresa
   * @author VSR, 08/05/2012
   */
  private function grabarContactos($idEmpresa){
    try {
      $arr = Utilidades::obtenerSessionPorNombre(WfEmpresaContacto::SESION_LISTADO);
      if (is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      //elimina los registros que no existe en la sesion
      $listadoId = "-1";
      for ($i = 0; $i <= $totalRegistros - 1; $i++) {
        $row = $arr[$i];
        $idContacto = Utilidades::isNull($row["IdContacto"], "-1");
        $listadoId .= ",".$idContacto;
      }
      $status = WfEmpresaContacto::eliminarDatos($idEmpresa, $listadoId);

      //graba los datos de la sesion
      for ($i = 0; $i <= $totalRegistros - 1; $i++) {
        $row = $arr[$i];
        $idContacto = $row["IdContacto"];
        $nombre = $row["Nombre"];
        $paterno = $row["Paterno"];
        $materno = $row["Materno"];
        $rut = $row["Rut"];
        $direccion = $row["Direccion"];
        $email = $row["Email"];
        $telefono = $row["Telefono"];
        $celular = $row["Celular"];
        $cargo = $row["Cargo"];
        $observacion = $row["Observacion"];
        $accionSQL = $row["AccionSQL"];

        //formatea valores
        Utilidades::separarRut($rut,$dv);

        if ($accionSQL == "INSERT" || $accionSQL == "UPDATE") {
          $oContacto = new WfEmpresaContacto();
          $oContacto->setId($idContacto);
          $oContacto->setNombre($nombre);
          $oContacto->setPaterno($paterno);
          $oContacto->setMaterno($materno);
          $oContacto->setRut($rut);
          $oContacto->setDv($dv);
          $oContacto->setDireccion($direccion);
          $oContacto->setEmail($email);
          $oContacto->setTelefono($telefono);
          $oContacto->setCelular($celular);
          $oContacto->setCargo($cargo);
          $oContacto->setObservacion($observacion);
          $oContacto->setIdEmpresa($idEmpresa);
          $oContacto->grabar();
        }
      }
      //limpia la sesion
      Utilidades::grabarSessionPorNombre(WfEmpresaContacto::SESION_LISTADO, null);

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * graba los datos de los workflow
   * @param <type> $idEmpresa
   * @author VSR, 10/05/2012
   */
  private function grabarWorkflow($idEmpresa){
    $status = "";

    try {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      $arr = Utilidades::obtenerSessionPorNombre(WfWorkflow::SESION_LISTADO);
      if (is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      //elimina los registros que no existe en la sesion
      $idUsuario = $oUsuario->getId();
      $listadoId = "-1";
      for ($i = 0; $i <= $totalRegistros - 1; $i++) {
        $row = $arr[$i];
        $idWorkflow = Utilidades::isNull($row["IdWorkflow"], "-1");
        $listadoId .= ",".$idWorkflow;
      }
      $status = WfWorkflow::eliminacionLogicaListado($idEmpresa, $listadoId, $idUsuario);

      //graba los datos de la sesion
      for ($i = 0; $i <= $totalRegistros - 1; $i++) {
        $row = $arr[$i];
        $idWorkflow = $row["IdWorkflow"];
        $nombre = $row["Nombre"];
        $descripcion = $row["Descripcion"];
        $activo = $row["Activo"];
        $idPlantilla = $row["IdPlantilla"];
        $fechaInicio = $row["FechaInicio"];
        $fechaTermino = $row["FechaTermino"];
        $accionSQL = $row["AccionSQL"];

        //graba los datos
        $status = WfWorkflow::grabarDatosMinimos($idWorkflow, $idEmpresa, $nombre, $idPlantilla, $activo, $descripcion, $fechaInicio, $fechaTermino, $idUsuario);
        if ($status == Sistema::CODIGO_SQL_ERROR){
          throw new Exception("No se pudo grabar el workflow");
        }
      }
      //limpia la sesion
      Utilidades::grabarSessionPorNombre(WfWorkflow::SESION_LISTADO, null);

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    //si no esta conectado entonces lo redirecciona al login
    if(!$this->usuarioLogueado()){
      $this->redireccionarLogin();
    }

    $idEmpresa = $this->Request["id"];
    $nombrePagina = $this->obtenerNombrePagina();
    $this->txtThemeBaseUrl->Value = $this->Page->Theme->BaseUrl;
    $this->txtIdEmpresa->Value = $idEmpresa;

    if(!$this->IsPostBack) {
      $this->obtenerDatos($idEmpresa);
      $this->inicializaControles($this->IsPostBack);
      $this->actualizaInterfaz();
      $this->mostrarMensajeUsuario();
      Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "");
      Utilidades::grabarSessionPorNombre(WfEmpresaContacto::SESION_LISTADO, null);
      Utilidades::grabarSessionPorNombre(WfWorkflow::SESION_LISTADO, null);
    }

  }

  public function btnCrearClick($sender, $param){
    $this->grabarEmpresa(Sistema::APLICAR);
  }

  public function btnAplicarClick($sender, $param){
    $this->grabarEmpresa(Sistema::APLICAR);
  }

  public function btnAceptarClick($sender, $param){
    $this->grabarEmpresa(Sistema::ACEPTAR);
  }


  public function btnEliminarClick($sender, $param){
    $idEmpresa = $this->Request["id"];
    $status = "";
    $textoMensaje = "";
    $eliminadoConExito = true;
    $queryString = "";

    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      //elimina la pagina
      $textoMensaje .= $this->eliminarEmpresa($status, $idEmpresa);

      if ($textoMensaje != "") {
        $eliminadoConExito = false;
      } else {
        $eliminadoConExito = true;
      }

      //muestra mensaje dependiendo si se grabo o no
      if ($eliminadoConExito) {
        switch ($status) {
          case "eliminado":
            $textoMensaje = "{#ELIMINADO}La empresa fue eliminada satisfactoriamente. Complete el formulario para ingresar uno nuevo.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ELIMINADO");
            break;
          case "error":
            $textoMensaje = "{#ERROR}Se produjo un error interno y no se pudo eliminar la empresa. Intente nuevamente por favor.<br />";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
            break;
        }
      } else {
        $textoMensaje = "{#ERROR}".$textoMensaje;
        Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
      }

      /*
       * DESCOMENTAR ESTE IF SI SE QUIERE QUE LA PAGINA SE CIERRE AUTOMATICAMENTE
      if ($status == "ingresado" || $status == "modificado") {
        Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "");
        $this->Page->ClientScript->registerEndScript("cerrarPopUp", "cerrarPopUpPagina('".$idPagina."','1','".urlEncode($this->txtTitulo->Text)."');");
      } else {
      */
        Utilidades::grabarSessionPorNombre("msg", $textoMensaje);
        //construye query string con los valores correspondientes
        $queryString = "&id=".(($status == "eliminado") ? "0" : $idEmpresa);
        $this->Response->redirect("index.php?page=".$nombrePagina.$queryString);
      /*}*/
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

//</editor-fold>

}

?>
